// 在ECMAscript 6 中新增一个api promise
// promise 是一个构造函数
var fs = require('fs')
var pp = require('./promise-fengzhuang')
// 创建 Promise 容器
// 1. 给别人一个承诺 i promise you
//    Promise容器一旦创建，就开始执行里面的代码

console.log(pp)
pp('./data/a.txt')

console.log(1)

var p1 = new Promise(function (resolve,reject) {
    // promise容器本身不是异步的   承诺里面的任务是异步的
    console.log(2)


    //从这开始 是异步任务
    fs.readFile('./data/a.txt','utf8',function (err,data) {
        if(err){
            // 失败了，成洛容器中的任务失败了
            // 把容器的pending状态便成为Rejected
            reject(err)
        } else {
            // console.log(3)
            // console.log(data)
            resolve(data)
        }
    })
})

var p2 = new Promise(function (resolve,reject) {
    //从这开始 是异步任务
    fs.readFile('./data/b.txt','utf8',function (err,data) {
        if(err){

            reject(err)
        } else {
            resolve(data)
        }
    })
})

var p3 = new Promise(function (resolve,reject) {
    //从这开始 是异步任务
    fs.readFile('./data/c.txt','utf8',function (err,data) {
        if(err){

            reject(err)
        } else {
            resolve(data)
        }
    })
})


// p1 就是一个承诺
// 当p1成功了 然后（then）做指定的操作
// then方法接收的函数就是容器中resolve（成功）函数
// 第二个函数就是想当与reject函数

p1
    .then(function (data) {
        console.log(data)
        //当p1读取成功的时候
        // 当前函数return的结果就是后面then中的function接收到
        //当你return 123 后面就接收到123  没有return 后面接收到的就是undefined对象
        // 真正有用的是我们可以return一个promise对象
        // 当return一个promise对象的时候，后续then中的方法的第一个参数会作为p2的resolve函数
        return p2
    },function (err) {
        console.log('读取文件失败'+err)
    })
    .then(function (data) {
        console.log(data)
        return p3
    })
    .then(function (data) {
        console.log(data)
    })


// p1.then(function (data) {
//     console.log(data)
//     p2.then(function (data) {
//         console.log(data)
//         p3.then(function (data) {
//             console.log(data)
//         },function (err) {
//             console.log('读取文件失败'+err)
//         })
//     },function (err) {
//         console.log('读取文件失败'+err)
//     })
// },function (err) {
//     console.log('读取文件失败'+err)
// })


console.log(4)